<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // 大小写
        console.log("  abc 33   ".toUpperCase())
        console.log("  ABc 33   ".toLowerCase())


        // 字符串移除空白
        console.log("  abc 33   ".trim())
        console.log("  abc 33   ".trimLeft())
        console.log("  abc 33   ".trimRight())
        // 获取单个字符
        console.log("abc".charAt(0));
        // 字符串截取

        //这个是最强的： slice(start,end), start和end都可以是负数,-1是最右侧的位置，字符串范围为[start,end)左闭右开
        let str = "0123456789";
        console.log(str.slice(3))
        console.log(str.slice(3, 7))
        console.log(str.slice(-3, -1))
        console.log(str.slice(3, -1))

        // substring(start,end)，这个函数也不支持负数，用起来很迷惑。不推荐。
        console.log(str.substring(3))
        console.log(str.substring(3, 7))

        // console.log(str.substring(-3,2)) // 将负数转为0
        // console.log(str.substring(3,-1)) /// 这个结果很有疑惑性。012，如果存在负数，则将参数重新调整了，
        // 上面的结果和下面的相同
        console.log(str.substring(0, 3))

        // console.log(str.substring(-3))//将-3转换为0


        //如果表达长度则使用这个， substr(start,length)，不支持负数
        console.log("substr " + str.substr(3))
        console.log(str.substr(3, 2))
        console.log(str.substr(3, 10))
        console.log(str.substr(0, 10))
        // console.log(str.substr(-3, 2)) // 将负数转为正数3
        // console.log(str.substr(3, -2))  // length为负数，结果为空




        // 字符串查找,indexOF,lastIndexOf 支持设置起始位置
        let str2 = "343"
        console.log(str2.indexOf("3")); // 3 从前向后
        console.log(str2.lastIndexOf("3")); //8 从后向前
        console.log(str2.indexOf(1)) // -1 没有返回-1
        console.log(str2.indexOf("3", 2)) // 从第2个位置向后搜索

        // search,支持正则表达式,不支持起始位置设置
        console.log(str2.search("4")) // 1
        console.log(str2.search(/4/i)) // 1



        // includes, 是否包含子串，返回true/false
        console.log(str2.includes("4")) // true
        console.log(str2.includes('3')) // true
        console.log(str2.includes('5')) // false
        console.log(str2.includes('3', 1)) // true,从第一个位置开始向后搜索

        let str3 = "helloworld"

        console.log(("startWith"))

        console.log(str3.startsWith("h")) // true
        console.log(str3.startsWith("e", 1)) // true，第二个参数设置查找的其实位置

        console.log("endWith")
        console.log(str3.endsWith('d'))
        console.log(str3.endsWith('or', 8)) // 第二个参数是查找的结束位置

        // 替换字符串
        // replace(被替换的串，替换串) 默认替换1次
        console.log("helloworld,helloworld".replace('hello', 'abc'))  // abcworld,helloworld

        // 全局替换需要使用正则
        console.log("helloworld,helloworld".replace(/hello/g, 'abc'))  // abcworld,abcworld

        // 重复生成

        console.log("abc".repeat(3))  // abcabcabc

        // 模糊电话号码中的中间4位

        let phoneNumber = "17747556687"
        console.log(phoneNumber.slice(0,3)+"*".repeat(4)+phoneNumber.slice(7))

        // 字符串分割

        console.log("hello world".split(" ")); // 结果为数组 ["hello", "world"]
        console.log("hello world".split("")); // 结果为数组 ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]

        // 类型转换

        console.log(typeof (99 + "")) // string 隐式转换
        console.log(typeof String(99)) // string 显示转换
        console.log(typeof {}.toString()) // string 对象可以使用toString()转换为字符串




    </script>
</body>

</html>